package nc.jv.Sort;

public class CountingDataGenerator implements DataGenerator
{

	/**
     * Генерирует входные данные для сортировки
     * 
     * <p>Лучший случай - массив одинаковых элементов
     * 
     * @param length
     *                Длина генерируемого массива
     * 
     * @return Массив заданной длины {@code length}  
     */
	@SuppressWarnings("rawtypes")
	@Override
	public Comparable[] generateBestData(int length)
	{
		Comparable[] array = new Integer[length];
		for (int i = 0; i < length; i++)
            array[i] = 1;
		return array;
	}

	/**
     * Генерирует входные данные для сортировки
     * 
     * <p>Среднестатистический случай - элементы повторяются
     * 
     * @param length
     *                Длина генерируемого массива
     * 
     * @return Массив заданной длины {@code length}  
     */
	@SuppressWarnings("rawtypes")
	@Override
	public Comparable[] generateNormalData(int length)
	{
		Comparable[] array = new Integer[length];
		for (int i = 0; i < length; i++)
			array[i] = (int) (Math.random() * length/10);
		return array;
	}

	/**
     * Генерирует входные данные для сортировки
     * 
     * <p>Худший случай - массив разных элементов в порядке убывания
     * 
     * @param length
     *                Длина генерируемого массива
     * 
     * @return Массив заданной длины {@code length}  
     */
	@SuppressWarnings("rawtypes")
	@Override
	public Comparable[] generateWorstData(int length)
	{
		Comparable[] array = new Integer[length];
		for (int i = 0; i < length; i++)
            array[i] = length-i;
		return array;
	}

}
